﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using DAO;
using Entidades;

namespace Negocio
{
    public class EtapaRules
    {

        public void GuardarEtapa(EtapaEntity etapa)
        {
            if (etapa != null)
            {
                var dao = new EtapaDAO();
                if (etapa.Id > 0)
                    dao.Update(etapa);
                else
                    etapa.Id = dao.Insert(etapa);
            }
        }

        public List<EtapaEntity> SeleccionarEtapaPorFiltro(int? id, string nombre, DateTime? fechaInicioDesde, DateTime? fechaInicioHasta, DateTime? fechaFinDesde, DateTime? fechaFinHasta, bool? permiteEmpate)
        {
            var dao = new EtapaDAO();
            var lista = dao.SelectAll();
            var listaFiltrada = (from e in lista
                                 where ((!id.HasValue || id.Value == e.Id) &&
                                        (string.IsNullOrEmpty(nombre) || e.Nombre == nombre) &&
                                        (!fechaInicioDesde.HasValue || e.FechaInicio >= fechaInicioDesde) &&
                                        (!fechaInicioHasta.HasValue || e.FechaInicio <= fechaInicioHasta) &&
                                        (!fechaFinDesde.HasValue || e.FechaFin >= fechaFinDesde) &&
                                        (!fechaFinHasta.HasValue || e.FechaFin <= fechaFinHasta) &&
                                        (!permiteEmpate.HasValue || e.PermiteEmpate == permiteEmpate))
                                 select e).ToList<EtapaEntity>();

            return listaFiltrada;
        }

        public List<EtapaEntity> SeleccionarTodas()
        {
            var dao = new EtapaDAO();
            return dao.SelectAll();
        }

        public EtapaEntity SeleccionarPorId(int id)
        {
            var dao = new EtapaDAO();
            return dao.Select(id);
        }

        public bool ExistenEtapasCargadas()
        {
            return SeleccionarTodas().Count > 0;
        }

        public void GuardarPartidosXEtapa(EtapaEntity etapa)
        {
            if (etapa != null)
            {
                var rule = new PartidoRules();
                rule.PersistirPartidoXEtapa(etapa);
            }
        }
    }

}
